package persistencia;

import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import negocio.Alumno;
import negocio.AlumnoControlador;
import negocio.Cursada;
import negocio.CursadaControlador;
import negocio.Examen;
import negocio.ExamenControlador;
import negocio.NotaExamen;

public class NotaExamenDAO 
{
	private static NotaExamenDAO instancia;
	private final Connection c;
	
	private NotaExamenDAO()
	{
		c = BDManager.getInstance().getConexion();
	}

	public static NotaExamenDAO getInstance()
	{
		if(instancia ==null)
		{
			instancia = new NotaExamenDAO();
		}
		return instancia;
	}
	
	public int getId (NotaExamen nota)
	{
		String query = "Select id FROM rinde where examen_fk =" + nota.getExamen().getId() +
				" and alumno_fk=" + nota.getAlumno().getDni() + ");";
		int res = 0;
		try {
			Statement s = c.createStatement();
			ResultSet rs = s.executeQuery(query);
			rs.next();
			res = rs.getInt(1);
			s.close();
		} catch (SQLException e) {
			// TODO: handle exception
		}
		return res;
	}
	
	
	
	public void guardar(NotaExamen notaExamen)
	{
		/*String queryGuardar = "INSERT INTO rinde(notaexamen, alumno_fk, examen_fk) VALUES (" + 
				notaExamen.getNota() + ",'"+ notaExamen.getAlumno().getDni() + "'," + notaExamen.getExamen().getId()+")";
		String queryUpdate = "UPDATE rinde SET notaexamen=" + notaExamen.getNota() + "where alumno_fk= '" + notaExamen.getAlumno().getDni()
				+ "' and examen_fk=" + notaExamen.getExamen().getId() +");"; 
				*/
		String query = "select merge_notas(" + notaExamen.getNota() + ",'" + notaExamen.getAlumno().getDni() + "'," +
				notaExamen.getExamen().getId()+ ");";
		try {
			Statement s = c.createStatement();
			
			s.execute(query);
			s.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public ArrayList<NotaExamen> getNotasExamenes(Examen examen)
	{
		String query = "SELECT * FROM rinde WHERE examen_fk="+ examen.getId();
		ArrayList<NotaExamen> res = new ArrayList<NotaExamen>();
		try {
			Statement s = c.createStatement();
			ResultSet rs = s.executeQuery(query);
			while(rs.next())
			{
				Alumno alumno = AlumnoDAO.getInstance().getAlumno(rs.getString(3));
				res.add(new NotaExamen(rs.getInt(1), examen, alumno, rs.getInt(2)));
			}
			s.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return res;
	}
	
	public ArrayList<NotaExamen> getNotasAlumno(Cursada cursada, Alumno alumno) { //devuelve las notas de todos los examenes de una cursada de un alumno
		ArrayList<Examen> examenes = ExamenDAO.getInstance().getExamenes(cursada);
		ArrayList<NotaExamen> tmp;
		ArrayList<NotaExamen> res = new ArrayList<NotaExamen>();
		for(Examen e: examenes)
		{
			tmp=(this.getNotasExamenes(e));
			for (NotaExamen n :tmp)
			{
				if(n.getAlumno().getDni()==alumno.getDni())
					res.add(n);
			}
		}
		return res;
		
	}

	public NotaExamen getNotaAlumnoExamen(Examen examen, Alumno alumno) {//devuelve la nota de un alumno para un examen unico
		ArrayList<NotaExamen> tmp = this.getNotasAlumno(examen.getCursada(), alumno);
		for(NotaExamen n: tmp)
		{
			if(n.getExamen().getId()==examen.getId())
				return n;
		}
		return null;
	}
	

}
